home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / trial / demon / TURNPIKE.1 / CLASSES.ZIP / JAVA / AWT / IMAGE / PixelGrabber.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-04-14  |  2.6 KB  |  211 lines

  1. package java.awt.image;
  2.  
  3. import java.awt.Image;
  4. import java.util.Hashtable;
  5.  
  6. public class PixelGrabber implements ImageConsumer {
  7.    ImageProducer producer;
  8.    int dstX;
  9.    int dstY;
  10.    int dstW;
  11.    int dstH;
  12.    int[] pixelbuf;
  13.    int dstOff;
  14.    int dstScan;
  15.    private boolean grabbing;
  16.    private int flags;
  17.    private final int GRABBEDBITS;
  18.    private final int DONEBITS;
  19.  
  20.    public PixelGrabber(Image var1, int var2, int var3, int var4, int var5, int[] var6, int var7, int var8) {
  21.       this(var1.getSource(), var2, var3, var4, var5, var6, var7, var8);
  22.    }
  23.  
  24.    public PixelGrabber(ImageProducer var1, int var2, int var3, int var4, int var5, int[] var6, int var7, int var8) {
  25.       this.GRABBEDBITS = 48;
  26.       this.DONEBITS = 112;
  27.       this.producer = var1;
  28.       this.dstX = var2;
  29.       this.dstY = var3;
  30.       this.dstW = var4;
  31.       this.dstH = var5;
  32.       this.dstOff = var7;
  33.       this.dstScan = var8;
  34.       this.pixelbuf = var6;
  35.    }
  36.  
  37.    public boolean grabPixels() throws InterruptedException {
  38.       return this.grabPixels(0L);
  39.    }
  40.  
  41.    public synchronized boolean grabPixels(long var1) throws InterruptedException {
  42.       if ((this.flags & 112) != 0) {
  43.          return (this.flags & 48) != 0;
  44.       } else {
  45.          long var3 = var1 + System.currentTimeMillis();
  46.          if (!this.grabbing) {
  47.             this.grabbing = true;
  48.             this.flags &= -129;
  49.             this.producer.startProduction(this);
  50.          }
  51.  
  52.          long var5;
  53.          for(; this.grabbing; this.wait(var5)) {
  54.             if (var1 == 0L) {
  55.                var5 = 0L;
  56.             } else {
  57.                var5 = var3 - System.currentTimeMillis();
  58.                if (var5 <= 0L) {
  59.                   break;
  60.                }
  61.             }
  62.          }
  63.  
  64.          return (this.flags & 48) != 0;
  65.       }
  66.    }
  67.  
  68.    public synchronized int status() {
  69.       return this.flags;
  70.    }
  71.  
  72.    public void setDimensions(int var1, int var2) {
  73.    }
  74.  
  75.    public void setHints(int var1) {
  76.    }
  77.  
  78.    public void setProperties(Hashtable var1) {
  79.    }
  80.  
  81.    public void setColorModel(ColorModel var1) {
  82.    }
  83.  
  84.    public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, byte[] var6, int var7, int var8) {
  85.       if (var2 < this.dstY) {
  86.          int var9 = this.dstY - var2;
  87.          if (var9 >= var4) {
  88.             return;
  89.          }
  90.  
  91.          var7 += var8 * var9;
  92.          var2 += var9;
  93.          var4 -= var9;
  94.       }
  95.  
  96.       if (var2 + var4 > this.dstY + this.dstH) {
  97.          var4 = this.dstY + this.dstH - var2;
  98.          if (var4 <= 0) {
  99.             return;
  100.          }
  101.       }
  102.  
  103.       if (var1 < this.dstX) {
  104.          int var14 = this.dstX - var1;
  105.          if (var14 >= var3) {
  106.             return;
  107.          }
  108.  
  109.          var7 += var14;
  110.          var1 += var14;
  111.          var3 -= var14;
  112.       }
  113.  
  114.       if (var1 + var3 > this.dstX + this.dstW) {
  115.          var3 = this.dstX + this.dstW - var1;
  116.          if (var3 <= 0) {
  117.             return;
  118.          }
  119.       }
  120.  
  121.       int var15 = this.dstOff + (var2 - this.dstY) * this.dstScan + (var1 - this.dstX);
  122.       int var10 = this.dstScan - this.dstW;
  123.       int var11 = var8 - var3;
  124.  
  125.       for(int var12 = var4; var12 > 0; --var12) {
  126.          for(int var13 = var3; var13 > 0; --var13) {
  127.             this.pixelbuf[var15++] = var5.getRGB(var6[var7++] & 255);
  128.          }
  129.  
  130.          var7 += var11;
  131.          var15 += var10;
  132.       }
  133.  
  134.       this.flags |= 8;
  135.    }
  136.  
  137.    public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, int[] var6, int var7, int var8) {
  138.       if (var2 < this.dstY) {
  139.          int var9 = this.dstY - var2;
  140.          if (var9 >= var4) {
  141.             return;
  142.          }
  143.  
  144.          var7 += var8 * var9;
  145.          var2 += var9;
  146.          var4 -= var9;
  147.       }
  148.  
  149.       if (var2 + var4 > this.dstY + this.dstH) {
  150.          var4 = this.dstY + this.dstH - var2;
  151.          if (var4 <= 0) {
  152.             return;
  153.          }
  154.       }
  155.  
  156.       if (var1 < this.dstX) {
  157.          int var14 = this.dstX - var1;
  158.          if (var14 >= var3) {
  159.             return;
  160.          }
  161.  
  162.          var7 += var14;
  163.          var1 += var14;
  164.          var3 -= var14;
  165.       }
  166.  
  167.       if (var1 + var3 > this.dstX + this.dstW) {
  168.          var3 = this.dstX + this.dstW - var1;
  169.          if (var3 <= 0) {
  170.             return;
  171.          }
  172.       }
  173.  
  174.       int var15 = this.dstOff + (var2 - this.dstY) * this.dstScan + (var1 - this.dstX);
  175.       int var10 = this.dstScan - this.dstW;
  176.       int var11 = var8 - var3;
  177.  
  178.       for(int var12 = var4; var12 > 0; --var12) {
  179.          for(int var13 = var3; var13 > 0; --var13) {
  180.             this.pixelbuf[var15++] = var5.getRGB(var6[var7++]);
  181.          }
  182.  
  183.          var7 += var11;
  184.          var15 += var10;
  185.       }
  186.  
  187.       this.flags |= 8;
  188.    }
  189.  
  190.    public synchronized void imageComplete(int var1) {
  191.       this.grabbing = false;
  192.       switch (var1) {
  193.          case 1:
  194.          default:
  195.             this.flags |= 192;
  196.             break;
  197.          case 2:
  198.             this.flags |= 16;
  199.             break;
  200.          case 3:
  201.             this.flags |= 32;
  202.             break;
  203.          case 4:
  204.             this.flags |= 128;
  205.       }
  206.  
  207.       this.producer.removeConsumer(this);
  208.       this.notifyAll();
  209.    }
  210. }
  211.